#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"
#include "SeqList.h"

// 通讯录的加载和保存
void ContactLoad(Contact* pcon)
{
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL) {
		printf("历史数据不存在，已为你创建新的通讯录！\n");
		return;
	}

	// 循环读取文件数据  
	Info info;
	while (fread(&info, sizeof(Info), 1, pf)) {
		SLPushBack(pcon, info);
	}
	printf("历史数据导入记录成功！\n");
}

void ContactSave(Contact* pcon)
{
	FILE* pf = fopen("contact.txt", "wb");
	if (pf == NULL) {
		perror("fopen error!\n");
		return;
	}

	// 将通讯记录写入文件  
	for (int i = 0; i < pcon->size; i++) {
		fwrite(pcon->arr + i, sizeof(Info), 1, pf);
	}
	printf("通讯记录数据保存成功！\n");
}

// 通讯录的初始化和销毁
void ContactInit(Contact* pcon) // 实际初始化的还是顺序表
{
	SLInit(pcon); // 初始化虽然是Info*，但是也可以置为NULL
	
	printf("是否导入历史数据? Yes...1|No...0\n你的选择是:");
	int isLoad; scanf("%d", &isLoad);

	if (isLoad == 1) ContactLoad(pcon);
	else printf("好的，新的通讯录已创建\n");
}

void ContactDestroy(Contact* pcon)
{
	printf("程序正在退出，是否保存通讯录？Yes...1|No...0\n你的选择是:");
	int isSave; scanf("%d", &isSave);

	if (isSave == 1) ContactSave(pcon);
	else printf("好的，本次通讯录不予保存\n");

	SLDestroy(pcon);
}

// 增加、删除、修改、查找、查看通讯录
void ContactAdd(Contact* pcon)
{
	// 创建联系人结构体变量
	Info info;

	printf("请输入联系人姓名:\n");
	scanf("%s", info.name);
	printf("请输入联系人年龄:\n");
	scanf("%d", &info.age);
	printf("请输入联系人性别:\n");
	scanf("%s", info.gender);
	printf("请输入联系人电话:\n");
	scanf("%s", info.tel);
	printf("请输入联系人住址:\n");
	scanf("%s", info.addr);

	// 保存数据到通讯录(顺序表)
	SLPushBack(pcon, info);
}

int FindByName(Contact* pcon, char name[])
{
	for (int i = 0; i < pcon->size; i++) {
		if (strcmp(pcon->arr[i].name, name) == 0)
		{
			// 找到了
			return i;
		}
	}
	return -1;
}

void ContactFind(Contact* pcon)
{
	char name[NAME_MAX];
	printf("请输入要查找的用户姓名:");
	scanf("%s", name);

	int findIndex = FindByName(pcon, name);
	if (findIndex == -1)
	{
		printf("联系人不存在!\n");
		return;
	}

	printf("找到了，该联系人信息如下!\n");
	printf("姓名:%s\n性别:%s\n年龄:%d\n电话:%s\n住址:%s\n",
		pcon->arr[findIndex].name,
		pcon->arr[findIndex].gender,
		pcon->arr[findIndex].age,
		pcon->arr[findIndex].tel,
		pcon->arr[findIndex].addr
	);

}
void ContactDel(Contact* pcon)
{
	// 删除前要查找
	// 找到了，可以删除
	// 找不到，不能执行删除
	char name[NAME_MAX];
	printf("请输入要删除的联系人姓名:");
	scanf("%s", name);

	int findIndex = FindByName(pcon, name);
	if (findIndex == -1) {
		printf("很抱歉，通讯录里未存有该联系人!\n");
		return;
	}

	SLErase(pcon, findIndex);
	printf("删除成功!\n");

}
void ContactModify(Contact* pcon)
{
	// 修改之前先查找
	// 找到了，执行修改操作
	// 没找到，不能执行修改操作

	char name[NAME_MAX];
	printf("请输入要修改的联系人姓名:\n");
	scanf("%s", name);

	int findIndex = FindByName(pcon, name);
	if (findIndex == -1) {
		printf("要修改的联系人不存在!\n");
		return;
	}

	// 找到了，可以进行修改
	printf("请输入姓名:");
	scanf("%s", pcon->arr[findIndex].name);
	printf("请输入年龄:");
	scanf("%d", &(pcon->arr[findIndex].age));
	printf("请输入性别:");
	scanf("%s", pcon->arr[findIndex].gender);
	printf("请输入电话:");
	scanf("%s", pcon->arr[findIndex].tel);
	printf("请输入住址:");
	scanf("%s", pcon->arr[findIndex].addr);

	printf("联系人修改成功!\n");
}
void ContactShow(Contact* pcon)
{
	// 格式按情况调整
	printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "住址");

	for (int i = 0; i < pcon->size; i++) {
		printf("%s %s %d %s %s\n",
			pcon->arr[i].name,
			pcon->arr[i].gender,
			pcon->arr[i].age,
			pcon->arr[i].tel,
			pcon->arr[i].addr
		);
	}
}
